package com.example.test;

import lombok.extern.slf4j.Slf4j;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.messaging.Message;
import org.springframework.stereotype.Service;

/**
 * <pre>
 * 适用场景：
 * 实时消息处理：如订单处理、日志分析等
 * 服务解耦：将业务逻辑封装为独立服务，通过消息通道触发
 * 流水线处理：多个@ServiceActivator串联形成处理链
 * </pre>
 *
 * @author：yu8home
 * @date：2025年7月9日 下午3:10:10
 */
@Service
@Slf4j
public class MessageService {

    /**
     * @ServiceActivator <pre>
     * 订阅通道：当该通道有消息到达时，方法会被自动触发
     * 如果方法有返回值，返回值会被自动发送到输出通道（outputChannel），否则消息流终止
     *
     * 异步支持：如果输入通道是异步的（如QueueChannel），消息处理会在独立线程中执行
     * 返回值处理：返回值会被自动封装成消息并发送到输出通道
     * 灵活配置：支持通过注解参数指定输入/输出通道、错误处理等
     * </pre>
     */
    @ServiceActivator(inputChannel = "inputChannel", outputChannel = "processingChannel")
    public String handleInputMessage(String payload) {
        log.info("接收消息：{}", payload);
        return payload.toUpperCase();
    }

    @ServiceActivator(inputChannel = "processingChannel", outputChannel = "outputChannel")
    public String processMessage(Message<String> message) {
        String payload = message.getPayload();

        log.info("getHeaders：{}", message.getHeaders());
        log.info("getPayload：{}", payload);

        return "完成处理: " + payload;
    }

}
